﻿/*************************************
 * Creator:SunnyPaine
 * DateTime:2022/8/22 15:21:52
 * Description:<Description>
 * CopyRight:
 * ***********************************/

using SunnyPaine.Autofac.Extension.Stereotype.Attributes;
using System.Collections.Generic;

namespace SunnyPaine.Autofac.Extension.SqlSugar.Repository
{
    /// <summary>
    /// 数据仓库共性操作。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    [Inject]
    public interface IRepository<T>
    {
        /// <summary>
        /// 新增数据。
        /// </summary>
        /// <param name="entity"></param>
        bool Insert(T entity);

        /// <summary>
        /// 批量新增数据。
        /// </summary>
        /// <param name="entities"></param>
        /// <returns></returns>
        bool InsertRange(List<T> entities);

        /// <summary>
        /// 新增或更新数据。
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        bool InsertOrUpdate(T entity);

        /// <summary>
        /// 批量新增或更新数据。
        /// </summary>
        /// <param name="entities"></param>
        /// <returns></returns>
        bool InsertOrUpdate(List<T> entities);

        /// <summary>
        /// 删除指定数据。
        /// </summary>
        /// <param name="id"></param>
        bool DeleteById(dynamic id);

        /// <summary>
        /// 批量删除指定数据。
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        bool DeleteByIds(dynamic[] ids);

        /// <summary>
        /// 修改数据。
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        bool UpdateById(T entity);

        /// <summary>
        /// 查询指定数据。
        /// </summary>
        /// <param name="id">主键。</param>
        /// <returns></returns>
        T SelectById(object id);

        /// <summary>
        /// 查询所有数据。
        /// </summary>
        /// <returns></returns>
        List<T> SelectAll();
    }
}
